package top.gytf.unifiedcall.jsr269.exception;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 用于标记需要生成的状态码枚举实现对应异常实现类
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface GenException {
    /**
     * 未指定的{@link #basePackage()}
     */
    String UNSPECIFIED_PACKAGE = "<UNSPECIFIED>";

    /**
     * 生成的异常保存的软件包，未指定时保存到被注解类的exception包
     */
    String basePackage() default UNSPECIFIED_PACKAGE;

    /**
     * 当生成异常已存在时的策略
     */
    RepeatPolicy repeatPolicy() default RepeatPolicy.SKIP;

    /**
     * 生成异常已存在时的策略
     */
    enum RepeatPolicy {
        /**
         * 直接报错，终止编译
         */
        ERROR,
        /**
         * 跳过生成
         */
        SKIP
    }

    /**
     * 标记在状态码枚举实现类的枚举值上，表示不生成该枚举值对应的异常
     */
    @interface Ignore {
    }
}
